import re
# 匹配指定的 字符串
#mach
from midware.helper import Context

re_palttern = r'abc'
res = re.match(re_palttern,'abcasdasdasdasdaabc')
# print(res)

#   search 全文匹配
res = re.search(re_palttern,'abcasdasdasdasdaabc')
# print(res)

# findall  查找所有
re_palttern = r'abc'   #[ ] 其中一个字符
res = re.findall(re_palttern,'abcasdasdasdasdaabc')
print(res)


# . 匹配任意字符 除了\n
re_palttern = r'.'
res = re.findall(re_palttern,'a\nbcasdasdasdasdaabc')
# print(res,'r.')

# \w   匹配单词 a-zA-Z数字

# \d 匹配数字 data  （因为有\d，所以有要r
re_palttern = r'\d'
res = re.findall(re_palttern,'a1234534bcasdasdasdasdaabc')
# print(res)

# * 表示任意次（包括0次
# + 表示至少一次
# ? 0或1次

# {2}  匹配2次  2个数字
re_palttern = r'\d{2}'
res = re.findall(re_palttern,'a1234534bcasdasdasdasdaabc')
# print(res)
# 贪婪模式
# todo {2，}  有， 表示2个以上
re_palttern = r'\d{2,}'
res = re.findall(re_palttern,'a1234534bcasdasdasdasdaabc')
# print(res)

# {，2} 最多2次，包括0次，0次是空的
re_palttern = r'\d{,2}'
res = re.findall(re_palttern,'a12@345￥34bca#sdasdasdasdaabc')
# print(res)

# {m，n}   m 到 n 次
re_palttern = r'\d{2,3}'
res = re.findall(re_palttern,'a12@345￥34bca#sdasdasdasdaabc')
# print(res)

# 匹配出来的 ，去掉两边的 #号     ? 号还可以解除贪婪模式
excelstr = '{"mobilephone":"#mobilephone#","menber_id":"#menber_id#"}'
reg = r'#(.*?)#'   #在中间加（）括号，可以只要中间的内容
res = re.findall(reg,excelstr)
# print(res)

# 替换 sub(正则表达式，新的值，被替换的字符串,1)    # 1表示先替换第一个，不写就全部替换
new_str = re.sub(reg,'132',excelstr,1)
# print(new_str)


# 封装，匹配出来后能够替换
def replce_able(excelstr):
    """while 循环 ，每次替换一个    re.search 每次只能找到一个"""
    re_pattern = r'#(.*?)#'
    while re.findall(re_pattern,excelstr):
        # print(re.findall(re_pattern,excelstr))
        # 第一次查到有2个，替换一个；第二次 剩1个，替换；第三次退出
        # 组  re.search(reg,sr) =><re.Match object; span=(16, 29), match='#mobilephone#'>
        #  .group(1)   得到mobilephone
        key = re.search(re_pattern,excelstr).group(1)
        print(key,'key')
        #替换   Context中添加好要替换的变量即可
        excelstr = re.sub(re_pattern,str(getattr(Context,key)),excelstr,1)
    return excelstr

if __name__ == '__main__':
    # replce_able(excelstr)

    re_pattern = r'#(.*?)#'
    key = re.search(re_pattern, excelstr)
    print(key)